package com.itheima.a13waitandnotify;

public class Foodie extends Thread {

    public void run() {
        /**
         * 编写同步代码的步骤：
         *      -- 死循环
         *      -- 同步代码块
         *      -- 判断共享数据是否到了末尾     -->推出死循环
         *      -- 判断共享数据是否还没到末尾    -> 执行核心逻辑
         */
        while(true) {

            synchronized(Desk.lock) {
                //共享数据到没到末尾 -->10碗面条是否吃完
                 if (Desk.count == 0 ) {
                     break ;
                 } else {
                     /**
                      * 判断桌子上是否有面条
                      * 没有就等待
                      * 有就开吃
                      * 吃完了唤醒厨师做
                      * 面条总数 - 1
                      * 桌子状态设为没有面条
                      */

                     if (Desk.FoodFlag == 0 ) {
                         //没有就等待 --> 用锁对象调用 wait() 这样这个锁就跟wait()绑定了 后面用唤醒全部时只唤醒跟这个wait绑定的锁
                         try {
                             Desk.lock.wait();
                         } catch (InterruptedException e) {
                             throw new RuntimeException(e);
                         }
                     } else {
                         Desk.count -- ;
                         System.out.println("消费者吃面条，还剩" + Desk.count + "碗");
                         //唤醒厨师
                         Desk.lock.notifyAll();
                         //桌子状态
                         Desk.FoodFlag = 0 ;
                     }
                 }
            }
        }
    }
}
